Geofencing is a way that modern software applications can respond to the geographic location of one or more users. A user carries a mobile device that can be located using a Global Positioning System (GPS) or any other suitable location mechanism. Often, the user sets a geofence boundary around a point-of-interest (POI) such as a home, an office, a retail location, etc. The mobile device detects when the user crosses a geofence boundary and takes a responsive action. For example, the geofence boundary may be around the user's home. When the user crosses the geofence boundary, the mobile device may initiate a responsive action in the user's home such as, turning on a light, raising or lowering a thermostat, etc.
The performance of a geofence application depends on the ability to accurately determine when a user (and his or her mobile device) crosses a geofence boundary. If the geofence application is not alerted when the user crosses a geofence boundary, or the alert is delayed, the responsive action may be delayed or not taken at all. In many places, however, it is difficult to accurately find a user's geographic location and, therefore, difficult to determine when the user crosses a geofence boundary. For example, clusters of tall buildings or other objects can obstruct GPS or cellular network signals.